5分钟使用kubeadm搭建Kubernetes集群

如何5分钟快速搭建一个Kubernetes集群。

Key Value
OS CentOS 7
Docker 建议 >= 13.1
Kubernetes 1.10.1
Kubernetes Master 无HA, 单机集群
Kubernetes etcd etcd容器, 无HA
网络 flannel

Docker

安装并启动docker,这里不做赘述。

Kubernetes组件

安装kubeadm, kubelet, kubectl。

yum源安装

我们可以直接使用Kubernetes Google官方的yum源:

1
2
3
4
5
6
7
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum.repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/dock/rpm-package-key.gpg

但由于一些众所周知的原因,我们需要配置代理才能使用上述yum源。在直连的情况下我们可以使用aliyun的源,但有时更新不够及时:

1
2
3
4
5
6
7
8
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg

使用vim /etc/yum.repos.d/kubernets.repo配置好上述一个yum源后,使用yum install -y kubeadm kubectl kubelet安装,但不能保证版本为v1.10.1。

RPM安装

也可以通过下载rpm包的方式进行离线安装:
kubelet
kubectl
kubeadm
下载完成后使用yum localinstall *.rpm安装。

其他操作

还有一些额外操作需要完成:

  1. 关闭swap。

    1
    2
    3
    swapoff -a
    # 注释掉有swap的一行
    vim /etc/fstab
  2. 关闭防火墙。

    1
    systemctl stop firewalld;systemctl disable firewalld;setenforce 0
  3. 关闭SELINUX。

    1
    /etc/selinux/config设置SELINUX=disabled
  4. 启用bridge-nf模式。

    1
    sysctl net.bridge.bridge-nf-call-iptables=1
  5. 设置docker的cgroup驱动为cgroupfs。

    1
    2
    3
    /lib/systemd/system/docker.service
    ExecStart=/usr/bin/dockerd-current ...
    --exec-opt native.cgroupdriver=cgroupfs
  6. 修改kubelet的cgroup驱动,与docker保持一致为cgroupfs。

    1
    2
    /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
    Environment="KUBELET_CGROUP_ARGS=--cgroup-driver=cgroupfs"
  7. 导入镜像。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    k8s.gcr.io/etcd-amd64:3.1.12 
    k8s.gcr.io/kube-apiserver-amd64:v1.10.1
    k8s.gcr.io/kube-controller-manager-amd64:v1.10.1
    k8s.gcr.io/kube-proxy-amd64:v1.10.1
    k8s.gcr.io/kube-scheduler-amd64:v1.10.1
    k8s.gcr.io/pause-amd64:3.1
    k8s.gcr.io/k8s-dns-kube-dns-amd64:1.14.8
    k8s.gcr.io/k8s-dns-dnsmasq-nanny-amd64:1.14.8
    k8s.gcr.io/k8s-dns-sidecar-amd64:1.14.8
    k8s.gcr.io/kubernetes-dashboard-amd64:v1.8.3
    quay.io/coreos/flannel:v0.10.0-amd64

启动集群

  1. 使用kubeadm启动集群,设置版本及pod子网网段。

    1
    kubeadm init --kubernetes-version=v1.10.1 --pod-network-cidr=10.244.0.0/16
  2. 拷贝config文件,使本机能通过kubectl操作集群。

    1
    2
    3
    4
    5
    mkdir -p $HOME/.kube
    cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    chown $(id -u):$(id -g) $HOME/.kube/config
    echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> /etc/profile
    source /etc/profile
  3. 创建flannel相关资源来接管容器网络。

    1
    2
    wget https://github.com/coreos/flannel/blob/master/Documentation/kube-flannel.yml
    kubectl apply -f kube-flannel.yml
  4. (可选)将Master节点的污点去除,使pod能调度到Master节点,但要避免端口冲突。

    1
    2
    3
    # 查看到Master的hostname
    kubectl get no
    kubectl taint no <hostname> node-role.kubernetes.io/master:NoSchedule-